package cn.jly.spring.aop.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Arrays;

/**
 * @author lanyangji
 * @description LoggerInvocationHandler
 * @date 2020/11/10 下午 3:32
 */
public class LoggerInvocationHandler implements InvocationHandler {
    /**
     * 被代理的对象
     */
    private Object obj;

    public LoggerInvocationHandler(Object obj) {
        this.obj = obj;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 目标方法执行前的增强逻辑
        System.out.println("方法" + method.getName() + "执行前，参数为：" + Arrays.toString(args));

        // 执行目标方法
        final Object res = method.invoke(obj, args);

        // 目标方法执行后的增强逻辑
        System.out.println("方法" + method.getName() + "执行后，结果为：" + res
                + ", 被代理对象为：" + obj);

        return res;
    }
}
